const fp = require('lodash/fp')
const { Maybe, Container} = require('./support')
// 练习1:使用fp.add(x,y)和fp.map(f,x)创建一个让functor里的值增加的函数ex1
let maybe = Maybe.of([5,6,1])
let x = 1 //增加的基数。这个取特殊值1
let ex1 = (array) =>{
    //你需要实现的函数...
    return fp.map((item) => fp.add(item,x), array)
}
console.log(maybe.map(ex1)._value)//[ 6, 7, 2 ]



// 练习2:实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do','ray','me','fa','so','la','ti','do'])
let ex2 = (array) => {
    //你需要实现的函数...
    return fp.first(array)

}
console.log(xs.map(ex2)._value)//do

// 练习3:实现一个函数ex3，使用safeProp和fp.first找到user的名字的首字母
let safeProp = fp.curry(function(x,o){
    return Maybe.of(o[x])
})
let user = {id:2, name: 'Albert'}
let ex3 = (str) => {
    //你需要实现的函数...
    return fp.first(str)
}
console.log(safeProp('name', user).map(ex3)._value)//A


// 练习4:使用Maybe重写ex4，不要有if语句
let ex4 = function(n){
    if(n){
        return parseInt(n)
    }
}
console.log(ex4('4'))//4
console.log(ex4(''))//undefined
console.log(Maybe.of('4').map(parseInt)._value)//4
console.log(Maybe.of('').map(parseInt)._value)//NaN